通过前面的示例,我们可以看到每个 pipeline 或 stage 运行结束后,都会返回一个结果(Finished 的状态)。post 的作用就是让我们可以将这个返回状态的值作为条件,决定运行一些额外的指令。如,一些可能预知的错误,在这里添加某些指令来修复。
post 可以支持以下判断条件:
由于篇幅问题,我就不截图了,直接写每次的结果,并符上 pipeline 脚本。
Always: Build 后,我们发现结果是 “SUCCESS”,并且两条指令都执行了。我们可以将第一条指令中的 “echo” 改成 “cho”,并再次 Build,我们会发现 Build 失败了,其返回结果是 “FAILURE”,并且第一条指令没有被执行,但是第二条指令依然被执行了。
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo Hello World'
}
}
}
post {
always {
sh 'echo I am always run!'
}
}
}
Changed:继续前面的 job,改回 echo,并将 always 改成 changed,再次 Build。Build 成功,并返回 “SUCCESS”(状态较前一次发生改变),所以第二条指令执行了。在没有任何改动的情况下,我们再次 Build,返回的结果依然是 “SUCCESS”(状态较前一次没有发生改变),所以第二条指令没有执行。我们再次将第一条指令的 “echo” 改成 “cho”,并 Build,返回结果是 “FAILURE”(状态较前一次发生改变),第一条指令没有执行,但是第二条指令执行了。
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo Hello World'
}
}
}
post {
changed {
sh 'echo I will run if have changed!'
}
}
}
Fixed:修正第一条指令的 echo,并将 post 指令改成 fixed,然后进行 Build(最后一次 Build 的结果是 “FAILURE”),Build 的结果是 “SUCCESS”,并且两条指令都执行。再次将第一条指令的 “echo” 改成 “cho”,并 Build,返回结果是 “FAILURE”,并且两条指令都没有执行。
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo Hello World'
}
}
}
post {
fixed {
sh 'echo I will run if it is fixed!'
}
}
}
Regression:修正 echo 指令,然后进行 Build,Build 成功,返回 “SUCCESS”,但只有第一条指令执行了,第二条没有执行。将第一条指令的 “echo” 改成 “cho”,并 Build,返回结果是 “FAILURE”, 但是第二条指令执行了。不做任何更改,再次 Build,结果依然是 “FAILURE”,但是这次两条指令都没有执行。
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo Hello World'
}
}
}
post {
regression {
sh 'echo I will regression!'
}
}
}
regression 当我们 Build 错误时,执行代码回滚时,非常有用。
关于 aborted,failure,unstable,success 和 unsuccessful 我这里就不演示了,这些都是正常的结果返回状态,如果结果是对应的状态,则运行对应的代码块。